﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Didsoft.AccesoUsuario.AccesoDatos.Entidades;

using Didsoft.AccesoUsuario.Negocios;
using Didsoft.AccesoUsuario.Negocios.Servicios;
using System.Web.Security;
using Boa.AIT.AccesoDatos.Entidades.DTO;
using Boa.AIT.Negocios;

namespace Boa.AIT.Web.Controllers
{
    public class LoginController : Controller
    {
        private IDUA_UsuarioNegociosServicio servicio = new DUA_UsuarioNegocios();
        private BOAPersonalNegocios boaPersonalNegocios = new BOAPersonalNegocios();


        //
        // GET: /Login/

        public ActionResult Index()
        {
            if (Didsoft.Mvc.Security.SessionContext<DUA_Usuario>.SessionKey != null)
                return RedirectToAction("Index", "Menu");


            if (Request.Browser.IsMobileDevice)
                return RedirectToAction("Index", "Movil");



            return View();
        }

        [HttpPost]
        public ActionResult Index(Didsoft.AccesoUsuario.AccesoDatos.Entidades.Lites.LoginModel model)
        {
            if (ModelState.IsValid)
            {
                DUA_Usuario dua_usuario = servicio.BuscarUsuario(model.Usuario, model.Contrasena);
                DtoBOAPersonal personaBOA = boaPersonalNegocios.BuscarUsuario(model.Usuario, model.Contrasena);

                if (dua_usuario == null && personaBOA != null)//usuario no existe en DUA_Usuario, pero si en personal 
                {
                    dua_usuario = boaPersonalNegocios.GuardarPersonaUsuario(personaBOA);
                }


                if ((dua_usuario != null && personaBOA != null) || (dua_usuario != null))
                {
                    if (dua_usuario.Bloqueado)
                    {
                        ModelState.AddModelError("", "Su cuenta esta bloqueada");
                        return View();
                    }


                    FormsAuthentication.SetAuthCookie(model.Usuario, false);
                    //Initialize session
                    DUAUsuario_DtoBOAPersonal objSession = new DUAUsuario_DtoBOAPersonal();
                    objSession.Id = dua_usuario.Id;
                    objSession.Nombre = dua_usuario.Nombre;
                    objSession.Persona = dua_usuario.Persona;
                    objSession.PreguntaSeguridad = dua_usuario.PreguntaSeguridad;
                    objSession.RespuestaSeguridad = dua_usuario.RespuestaSeguridad;
                    objSession.Rol = dua_usuario.Rol;
                    objSession.Bloqueado = dua_usuario.Bloqueado;
                    objSession.Contrasena = dua_usuario.Contrasena;

                    if (personaBOA != null)
                    {
                        objSession.DtoBOAPersonal = personaBOA;
                        //objSession.DUA_Usuario = dua_usuario;
                    }

                    Didsoft.Mvc.Security.SessionContext<DUAUsuario_DtoBOAPersonal>.LoadSessionParams(objSession);

                    return RedirectToAction("Index", "Menu");
                }
                else
                {
                    ModelState.AddModelError("", "Usuario o clave no existe");
                }
            }
            return View();
        }




        [HttpPost]
        public ActionResult ValidaRedirector(FormCollection formData)
        {

            string usuario = formData["usuario"];
            string clave = formData["clave"];
            string controlador = formData["controlador"];
            string accion = formData["accion"];
            string guid = formData["guid"];

            if (ModelState.IsValid)
            {
                DUA_Usuario dua_usuario = servicio.BuscarUsuario(usuario, clave);
                DtoBOAPersonal personaBOA = boaPersonalNegocios.BuscarUsuario(usuario, clave);

                if ((dua_usuario != null && personaBOA != null) || (dua_usuario != null))
                {
                    if (dua_usuario.Bloqueado)
                    {
                        ModelState.AddModelError("", "Su cuenta esta bloqueada");
                        return RedirectToAction("Index", "Movil");
                    }


                    FormsAuthentication.SetAuthCookie(usuario, false);
                    //Initialize session
                    DUAUsuario_DtoBOAPersonal objSession = new DUAUsuario_DtoBOAPersonal();
                    objSession.Id = dua_usuario.Id;
                    objSession.Nombre = dua_usuario.Nombre;
                    objSession.Persona = dua_usuario.Persona;
                    objSession.PreguntaSeguridad = dua_usuario.PreguntaSeguridad;
                    objSession.RespuestaSeguridad = dua_usuario.RespuestaSeguridad;
                    objSession.Rol = dua_usuario.Rol;
                    objSession.Bloqueado = dua_usuario.Bloqueado;
                    objSession.Contrasena = dua_usuario.Contrasena;

                    Didsoft.Mvc.Security.SessionContext<DUAUsuario_DtoBOAPersonal>.LoadSessionParams(objSession);

                    if(!string.IsNullOrEmpty(guid))
                       return RedirectToAction("VerEquipoCompleto", "Movil", new { guid = guid });
                    else
                        return RedirectToAction("Index", "Movil");
                }
                else
                {
                    ModelState.AddModelError("", "Usuario o clave no existe");
                }
            }

            if (!string.IsNullOrEmpty(guid))
                return RedirectToAction("VerEquipo", "Movil", new { guid = guid });
            else
                return RedirectToAction("Index", "Movil");
        }

        public ActionResult CerrarSessionMovil()
        {
            Didsoft.Mvc.Security.SessionContext<DUA_Usuario>.CloseSession();
            return RedirectToAction("Index", "Movil");
        }



        public ActionResult CerrarSession()
        {
            Didsoft.Mvc.Security.SessionContext<DUA_Usuario>.CloseSession();
            return RedirectToAction("Index", "Login");
        }
        

    }
}
